package me.spring.cloud.common.components.oss.cloud;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import javax.validation.constraints.NotNull;

/**
 * @description: oss服务
 * @author: luffy
 * @create: 2018-08-22 10:06
 **/
public interface CloudStorageService {

  /**
   * @param file 文件(绝对路径)
   * @param fileName （文件名称 未null时会自动生成，可以是文件路径+文件名称，带后缀）
   * @Return java.lang.String
   * @Description 上传本地文件
   * @author luffy
   * @date 2019-07-05
   */
  String uploadForLocal(@NotNull String file, String fileName) throws Exception;

  /**
   * @param data 文件字节
   * @param fileName （文件名称 未null时会自动生成）
   * @param mime 指定文件mimetype
   * @Return java.lang.String
   * @Author luffy
   * @Description 上传byte文件
   * @Date 2019-07-05 15:28
   */
  String uploadForByte(@NotNull byte[] data, String fileName, @NotNull String mime) throws Exception;

  /**
   * @param inputStream 文件流
   * @param fileName （文件名称 未null时会自动生成）
   * @param mime 指定文件mimetype
   * @Return java.lang.String
   * @Author luffy
   * @Description 上传流文件
   * @Date 2019-07-05 15:33
   */
  String uploadForInputStream(@NotNull InputStream inputStream, String fileName, @NotNull String mime) throws Exception;

  /**
   * @param remoteSrcUrl 网络文件地址
   * @param fileName 文件名称(可以为null)
   * @Return java.lang.String
   * @Author luffy
   * @Description 上传网络文件
   * @Date 2019-07-05 15:42
   */
  String uploadForRemoteSrcUrl(@NotNull String remoteSrcUrl, String fileName) throws Exception;

  /**
   * @param fileName 文件名称
   * @param newMimeType 文件类型
   * @Return void
   * @Author luffy
   * @Description 修改文件类型
   * @Date 2019-07-05 15:45
   */
  void modifyMimeType(@NotNull String fileName, @NotNull String newMimeType) throws Exception;

  /**
   * @param fileNames 文件名称
   * @Return java.util.HashMap<java.lang.String, java.util.Map < java.lang.String, java.lang.Object>>
   * @Author luffy
   * @Description 批量删除文件
   * @Date 2019-07-05 15:46
   */
  HashMap<String, Map<String, Object>> batchDelete(@NotNull String... fileNames) throws Exception;

  /**
   * @param fileName 文件名称
   * @param newFileName 新文件名称
   * @Return java.lang.String
   * @Author luffy
   * @Description 重命名
   * @Date 2019-07-05 15:47
   */
  String renameFile(@NotNull String fileName, @NotNull String newFileName) throws Exception;

  /**
   * @param fileName 文件名称
   * @Return void
   * @Author luffy
   * @Description 删除文件
   * @Date 2019-07-05 15:49
   */
  void delete(@NotNull String fileName) throws Exception;

  /**
   * @Author luffy
   * @Description 判断手否存在文件
   * @Param file
   * @Return boolean
   * @Date 2019-09-18 16:40
   */
  boolean isExists(@NotNull String file) throws Exception;
}
